home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / gui / imwin / messagearea.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  151 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from __future__ import with_statement
  5. import wx
  6. import wx.html as wx
  7. from datetime import datetime, date, timedelta
  8. import time
  9. from gui import skin
  10. from gui.imwin.styles.stripformatting import strip
  11. from gui.browser.webkit import WebKitWindow
  12. from common import pref, profile, prefprop
  13. from util import Storage as S, import_function, takemany, toutc, fromutc
  14. from logging import getLogger
  15. log = getLogger('msgarea')
  16. AUTORESP = _('[Auto-Response] ')
  17.  
  18. def history_enabled():
  19.     if pref('conversation_window.show_history', True):
  20.         pass
  21.     return pref('log.ims', True)
  22.  
  23.  
  24. def should_show_time(tstamp1, tstamp2):
  25.     return fromutc(tstamp1).date() != fromutc(tstamp2).date()
  26.  
  27.  
  28. class MessageArea(WebKitWindow):
  29.     
  30.     def __init__(self, parent, header_enabled = True):
  31.         WebKitWindow.__init__(self, parent)
  32.         self.inited = False
  33.         self.header_enabled = True
  34.  
  35.     date_context_format = '%A, %B %d, %Y'
  36.     show_fonts = prefprop('appearance.conversations.show_message_fonts', True)
  37.     show_colors = prefprop('appearance.conversations.show_message_colors', True)
  38.     show_emoticons = prefprop('appearance.conversations.emoticons.enabled', True)
  39.     htmlize_links = prefprop('appearance.conversations.htmlize_links', True)
  40.     
  41.     def init_content(self, theme, chatName = None, buddy = None, show_history = True):
  42.         self.theme = theme
  43.         now = datetime.now()
  44.         self.tstamp = toutc(datetime(now.year, now.month, now.day))
  45.         if self.header_enabled:
  46.             pass
  47.         show_header = pref('appearance.conversations.show_header', False)
  48.         initialContents = theme.initialContents(chatName, buddy, show_header)
  49.         self.SetPageSource(initialContents, theme.baseUrl)
  50.         if show_history and history_enabled() and buddy is not None:
  51.             self.show_history(buddy)
  52.         
  53.         self.inited = True
  54.  
  55.     
  56.     def show_history(self, buddy):
  57.         num_lines = max(0, pref('conversation_window.num_lines', 5, int))
  58.         if num_lines > 0:
  59.             msgobjs = reversed(list(takemany(num_lines, buddy.history)))
  60.             self.replay_messages(msgobjs, buddy)
  61.         
  62.  
  63.     
  64.     def replay_messages(self, msgobjs, buddy, context = True):
  65.         next = False
  66.         oldname = None
  67.         olddirection = None
  68.         for msg in msgobjs:
  69.             name = msg.buddy.name
  70.             direction = msg.type
  71.             if oldname == name:
  72.                 pass
  73.             next = direction == olddirection
  74.             msg.buddy = buddy.protocol.get_buddy(name)
  75.             self.format_message(direction, msg, next, context = context)
  76.             oldname = name
  77.             olddirection = direction
  78.         
  79.  
  80.     
  81.     def show_header(self, show):
  82.         return self.RunScript(self.theme.show_header_script(show))
  83.  
  84.     
  85.     def date_status(self, dt):
  86.         format_dt = fromutc(dt)
  87.         return S(message = format_dt.strftime(self.date_context_format), timestamp = dt, buddy = None, type = None)
  88.  
  89.     
  90.     def format_message(self, messagetype, messageobj, next = False, context = False):
  91.         if messagetype != 'status':
  92.             msgtime = messageobj.timestamp
  93.             if msgtime is None:
  94.                 msgtime = datetime.utcnow()
  95.             
  96.             if should_show_time(self.tstamp, msgtime):
  97.                 self.format_message('status', self.date_status(msgtime), next = False, context = context)
  98.                 next = False
  99.             
  100.             self.tstamp = msgtime
  101.         
  102.         content_type = getattr(messageobj, 'content_type', None)
  103.         if content_type is not None:
  104.             if content_type == 'text/plain':
  105.                 preserve_whitespace = preserve_whitespace
  106.                 import util
  107.                 messageobj.message = messageobj.message.encode('xml')
  108.                 messageobj.message = preserve_whitespace(messageobj.message)
  109.             
  110.         
  111.         if self.theme.allow_text_colors:
  112.             pass
  113.         show_colors = self.show_colors
  114.         show_emoticons = None if self.show_emoticons else None
  115.         transforms = dict(emoticons = show_emoticons, links = self.htmlize_links, spaces = True)
  116.         (stripped, strip_values) = strip(messageobj.message, formatting = not (self.show_fonts), colors = not show_colors, plaintext_transforms = transforms)
  117.         messageobj = messageobj.copy()
  118.         messageobj.message = stripped
  119.         if getattr(messageobj, 'has_autotext', False):
  120.             extra = { }
  121.         else:
  122.             extra = dict(has_autotext = True, autotext = AUTORESP)
  123.         if self.show_colors:
  124.             extra.update(handle_colors(strip_values))
  125.         
  126.         (func, msg) = self.theme.format_message(messagetype, messageobj, next, context, **extra)
  127.         if func:
  128.             script = "%s('%s');" % (func, js_escape(msg))
  129.             self.RunScript(script)
  130.         
  131.  
  132.  
  133.  
  134. def handle_colors(vals):
  135.     bodycolor = None
  136.     if 'bgcolor' in vals:
  137.         bodycolor = vals['bgcolor'][0]
  138.     elif 'back' in vals:
  139.         bodycolor = vals['back'][0]
  140.     
  141.     if bodycolor:
  142.         return {
  143.             'textbackgroundcolor': bodycolor }
  144.     
  145.     return { }
  146.  
  147.  
  148. def js_escape(msg):
  149.     return msg.replace('\\', '\\\\').replace('\n', '\\\n').replace('\r', '\\\r').replace("'", ''')
  150.  
  151.